#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
        int sum = 0;
        for (auto i : nums) sum += i;
        if (sum % 3 == 0) return sum;
        else if (sum % 3 == 1)
        {
            int a1 = 100000, a2 = 100000, b = 100000;
            for (auto i : nums)
            {
                if (i % 3 == 1) b = min(b, i);
                else if (i % 3 == 2)
                {
                    if (i < a1) a2 = a1, a1 = i;
                    else if (i < a2) a2 = i;
                }
            }
            int mi;
            if (a1 == 100000 || a2 == 100000) mi = b;
            else mi = min(a1 + a2, b);
            return sum - mi;
        }
        else
        {
            int a1 = 100000, a2 = 100000, b = 100000;
            for (auto i : nums)
            {
                if (i % 3 == 2) b = min(b, i);
                else if (i % 3 == 1)
                {
                    if (i < a1) a2 = a1, a1 = i;
                    else if (i < a2) a2 = i;
                }
            }
            int mi;
            if (a1 == 100000 || a2 == 100000) mi = b;
            else mi = min(a1 + a2, b);
            return sum - mi;
        }
    }
};